查看原文
其他

超好用的事件研究法

爬虫俱乐部 Stata and Python数据分析 2022-03-15

本文作者:王玉洁中南财经政法大学金融学院

本文编辑:谭   可

技术总编:戴   雯

Stata&Python云端课程来啦!

       为了感谢大家长久以来的支持和信任,爬虫俱乐部为大家送福利啦!!!Stata&Python特惠课程双双上线腾讯课堂~爬虫俱乐部推出了Python编程培训课程Stata基础课程Stata进阶课程Stata文本分析正则表达式网络爬虫基本字符串课程。报名课程即可加入答疑群,对报名有任何疑问欢迎在公众号后台和腾讯课堂留言哦。我们在这篇推文的最后提供了每门课程的课程二维码,大家有需要的话可以直接扫描二维码查看课程详情并进行购买哦~



引言大家好呀,又见面了!今天小编为大家带来的是金融学研究中必备的基本功之一:事件研究法。事件研究法主要是利用相关数据来测定某一特定的经济事件对上市公司的影响;其基本思想是:设定事件产生影响的窗口(Event Window),然后计算事件窗口期的异常收益率和累计异常收益率,并用这两个指标的统计检验量衡量事件影响的显著程度。这里以前些天因为模特形象冲上微博热搜的三只松鼠为例进行事件研究法的介绍,我们一起来看看吧!

一、单个事件的事件研究
2021年12月26日,三只松鼠因为海报中模特的“眯眯眼”和“厚嘴唇”等元素是在故意丑化国人而冲上热搜,市值蒸发上亿。由于多个事件研究的程序比较复杂,这里先以三只松鼠为例,对单个事件进行进行事件研究,再用多个事件研究展示frame post的数据整理功能。
首先,我们要确定三只松鼠的海报模特事件的发生的日期,发生日期是2021-12-26。然后需要先建立框架index,用于存放沪深300指数的数据。具体程序如下:
*建立新框架用于存放沪深300数据clear allmkf indexframe index:{ cntrade 300, index keep date rmt}cwf index
以上程序执行完成后的结果如下图所示:

接着,使用cntrade命令获取三只松鼠的数据,保留stkcd、date和rit;同时,使用框架合并命令frlink,将框架index中的沪深300的数据与主框架进行合并,具体操作程序如下:
cwf defaultcntrade 300783keep stkcd date ritfrlink 1:1 date, frame(index) gen(date_link)frget rmt,from(date_link)drop date_linkdrop if rmt==.
运行结果如下:

下一步就是定义事件期。在这一步,我们需要构造一个相对的时间变量time,事件发生日为0,事件前为-1,-2,......,事件后为1,2,3......,同时需要对时间进行排序,具体程序如下:
***定义事件窗口期keep if year(date)>=2021preservelocal date = date("2021-12-26","YMD")keep if date>=`date'sort dategen time=_n-1save post-event, replacerestore
keep if date<=`date'gsort -dategen time=-_nsort timeappend using post-eventkeep if time>=-50 & time<=10
执行结果如下图所示:

当前内存中包含事件发生前50天以及后10天的数据,。假定估计窗口是(-50,-5),事件窗口期为(-3,5),先在估计窗口用reg命令回归,再在事件窗口用predict命令进行预测,然后只保留预测范围内得数据,最后进行累加。具体程序如下:
***进行回归预测***reg rit rmt if time<=-5 //rit=β0+β1*rmt+σ,预测出了β0 β1predict AR if time>=-3 & time<=5 //AR就是rit减去上一步预测的rit,是市场不能预测的部分drop if AR==.gen CAR = sum(AR)
运行结果如下:

由于前面我们并没有提前设定一个专门存放CAR的框架,因此,这里我们需要使用post命令将上表中的信息装到信封中发送出去,这个命令的具体用法可以参考之前的推文“免费事件研究,一片片从邮局寄来”。具体程序如下:
local stkcd = stkcd[1]forvalues m = 1(1)9{ local CAR`m' = CAR[`m']}
capture postclose eventpostfile event stkcd CAR1 CAR2 CAR3 CAR4 CAR5 CAR6 CAR7 CAR8 CAR9 using "D:/事件研究法.dta",replace //定义好邮件及接受地址post event (`stkcd') (`CAR1') (`CAR2') (`CAR3') (`CAR4') (`CAR5') (`CAR6') (`CAR7') (`CAR8') (`CAR9') //调用之前设定好的post命令postclose event //关闭邮件系统use "D:/事件研究法.dta", clear //打开事件研究的文件
运行结果如下图所示:

以上就是单个事件研究的全过程了,是不是觉得又简单又好用呢!接下来一起来看看多个事件研究的全过程吧!
二、多个事件的事件研究
如果我们要对多个事件进行事件研究,需要新建两个框架,一个是用于存放最后结果的CAR框架,一个是用于存放事件的event框架。然后我们将上述的过程嵌入到循环中,每个事件都有一个id,循环次数就是event框架的总行数。这里就会展示frame post命令的强大之处了。循环中得到的数据将通过frame post命令邮寄到框架CAR中,得到我们最终想要的结果。
首先,建立两个框架,一个是用于存放CAR的框架,一个用于存放事件event的框架,并将事件读入到event框架中,具体程序如下:
clear allmkf CAR stkcd date CARmkf eventframe event:{ input stkcd str10 date 2511 "2015-06-05" 2557 "2014-03-03" 300046 "2016-01-20" 300783 "2021-12-26" 600518 "2018-10-16" end gen date1=date(date,"YMD") drop date rename date1 date format date %dCY-N-D local N=_N}
框架event的内容如下:

接着,我们将单个事件研究的过程嵌入到循环中用于多个事件研究,并将命令frame post CAR (stk') (d') (CAR[_N])放在循环的末尾,每进行一轮循环,股票代码、事件日期以及累计异常收益率就会被邮寄到CAR框架中。我们最后只需要使用cwf这个命令切换到框架CAR就能够看到最终的结果。具体执行程序如下:
mkf indexframe index:{ cntrade 300,index keep date rmt}
forvalues i = 1/`N'{ local stk = _frval(event,stkcd,`i') local d = _frval(event,date,`i') cntrade `stk' keep date rit frlink 1:1 date,frame(index) gen(date_link) frget rmt,from(date_link) drop date_link drop if rmt==. preserve keep if date>=`d' sort date gen time =_n-1 save after,replace restore //事件后日期处理
keep if date<`d' gsort -date gen time= -_n append using after keep if time>=-50 & time<=10 //事件前日期处理 reg rit rmt if time<=-5 predict AR if time>=-3 & time<=5 drop if AR==. gen CAR = sum(AR) //计算累计异常收益率 frame post CAR (`stk') (`d') (CAR[_N])}cwf CARformat date %dCY-N-D
运行结果如下:

这里就比使用post命令要简便快捷很多,是不是已经感觉到了事件研究搭载frame post处理数据的强大之处了呢?
以上就是今天小编为大家介绍的全部内容了,大家也赶快尝试一下吧!
END
最后,我们为大家揭秘雪球网(https://xueqiu.com/)最新所展示的沪深证券和港股关注人数增长Top10。




腾讯课堂课程二维码








            


 对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!











往期推文推荐

        如何绘制任泽平《鼓励生育基金》的几幅图

        Python 第六天——字符串

        findname——想要什么找什么

        Python字符串之“分分合合”

        PDF转docx可批量操作?——wordconvert的小技巧

        考研之后,文科生需以“do”躬“do”!

       手绘五星兴家国——用Stata绘制五星红旗

        Seminar丨董事会的性别多样化和企业创新:来自国际的证据

       Python与数据库交互——窗口函数

        Stata之post命令——数据邮递 

        爬虫俱乐部成员的Stata学习经验分享来啦!

       Seminar丨2002年萨班斯·奥克斯利法案的经济后果

        我几乎画出了“隔壁三哥”家的国旗

        Python基础——三大数字类型,你都了解吗?
        如何用Stata绘制带指向性箭头标注的图像       
       Seminar丨荐仆贷款——19世纪中国的信任辅助贷款       【技能篇】多进程队列间通信

Seminar丨公司董事会的人才增长:来自中国的证据

正则表达式--懒惰模式

爬完独立董事的年薪,我的眼镜跌破了!识别旅游“照骗”——看风景名胜是否名副其实主成分分析的Python实现

正则表达式--贪婪模式

Seminar丨谁更重要:高管股权薪酬与财务报告欺诈DOS能量,超乎你想象!

爬虫实战丨走进哈利波特的魔法世界

数据集合并的新路子-frlink命令

Seminar丨附近的公司:利用卫星图像研究本地信息优势

线性同余法生成伪随机数 

[技能篇]多线程爬虫

“好哭”是衡量一部好电影的标准吗?

Stata&Python云端课程来啦!

带你了解Stata中的矩阵

Seminar|总统的朋友:政治关联与企业价值
爬虫实战 | 爬取中国天气网

关于我们 


   微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

   武汉字符串数据科技有限公司一直为广大用户提供数据采集和分析的服务工作,如果您有这方面的需求,请发邮件到statatraining@163.com,或者直接联系我们的数据中台总工程司海涛先生,电话:18203668525,wechat: super4ht。海涛先生曾长期在香港大学从事研究工作,现为知名985大学的博士生,爬虫俱乐部网络爬虫技术和正则表达式的课程负责人。



此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。

投稿邮箱:statatraining@163.com投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里
为作者署名,并有赏金分成。

2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众
号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存